#ifndef _CORELSPYAPIPROXY_H_
#define _CORELSPYAPIPROXY_H_

#include "StdAfx.h"
#include "CorelSpyMediator.h"
#include "CorelSymbolEngine.h"

class CCorelSpyAPIProxy
{
public:
    CCorelSpyAPIProxy(CCorelSpyMediator *pcMediator);
    virtual ~CCorelSpyAPIProxy();

public:
    VOID WINAPI OutputDebugStringA(LPCSTR lpOutputString);
    VOID WINAPI OutputDebugStringW(LPCWSTR lpOutputString);

    LRESULT WINAPI SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
    LRESULT WINAPI SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

    BOOL WINAPI PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
    BOOL WINAPI PostMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

    long WINAPI BroadcastSystemMessageA(DWORD flags, LPDWORD lpInfo, UINT Msg, WPARAM wParam, LPARAM lParam);
    long WINAPI BroadcastSystemMessageW(DWORD flags, LPDWORD lpInfo, UINT Msg, WPARAM wParam, LPARAM lParam);

    long WINAPI BroadcastSystemMessageExA(DWORD flags,LPDWORD lpInfo, UINT Msg, WPARAM wParam, LPARAM lParam, PBSMINFO pbsmInfo);
    long WINAPI BroadcastSystemMessageExW(DWORD flags,LPDWORD lpInfo, UINT Msg, WPARAM wParam, LPARAM lParam, PBSMINFO pbsmInfo);

    HMODULE WINAPI LoadLibraryA(LPCSTR lpLibFileName);
    HMODULE WINAPI LoadLibraryW(LPCWSTR lpLibFileName);

    HMODULE WINAPI LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
    HMODULE WINAPI LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);

    int WINAPI MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar);
    int WINAPI WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar);

    LONG WINAPI RtlMultiByteToUnicodeN(PWCH UnicodeString, ULONG MaxBytesInUnicodeString, PULONG BytesInUnicodeString, const CHAR *MultiByteString, ULONG BytesInMultiByteString);
    LONG WINAPI RtlUnicodeToMultiByteN(PCHAR MultiByteString, ULONG MaxBytesInMultiByteString, PULONG BytesInMultiByteString, PCWCH UnicodeString, ULONG BytesInUnicodeString);


private:
    CRITICAL_SECTION m_csLock;
    CCorelSpyMediator *m_pcMediator;
};

#endif // _CORELSPYAPIPROXY_H_